/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package aqu.controlador.CuentasPorCobrar;

import aqu.bean.generico.BeanGenerico;
import aqu.persistencia.Dao.CuentasPorCobrar.CxcCabeceraRetencionManager;
import aqu.persistencia.Dao.CuentasPorCobrar.CxcClienteManager;
import aqu.persistencia.Dao.CuentasPorCobrar.CxcDetalleRetencionManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpEstadoRetencionManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpImpuestoManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpRetencionManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpTipoDocumentoManager;
import aqu.persistencia.entity.*;
import aqu.persistencia.utilidad.MessagesController;
import com.icesoft.faces.component.ext.RowSelectorEvent;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

/**
 *
 * @author Verito Ramirez
 *         Victor Jaramillo
 */
@ManagedBean(name = "retencionControllerCxc")
@ViewScoped
public class RetencionController extends BeanGenerico {

    private CxcCabeceraRetencion cabeceraRetencion;
    private CxcDetalleRetencion detalleRetencion;
    private CxpEstadoRetencion estadoRetencion;
    private CxpTipoDocumento tipoDocumento;
    private CxpRetencion retencion;
    private CxpImpuesto impuesto;
    private CxcCliente cliente;
    
    private List<CxcCabeceraRetencion> listaCabeceraRet;
    private List<CxcDetalleRetencion> listaDetalleRet;
    private List <CxpEstadoRetencion> listaEstadoRet;
    private List<CxpTipoDocumento> listaTipoDocumento;
    private List<CxpRetencion> listaRetenciones;
    private List<CxpImpuesto> listaImpuestos;
    private List<CxcCliente> listaClientes;
        
    private CxcCabeceraRetencionManager cxcCabeceraRetManager = new CxcCabeceraRetencionManager();
    private CxcDetalleRetencionManager cxcDetalleRetManager = new CxcDetalleRetencionManager();
    private CxpEstadoRetencionManager cxpEstadoRetManager = new CxpEstadoRetencionManager();
    private CxpTipoDocumentoManager cxpTipoDocManager = new CxpTipoDocumentoManager();
    private CxpRetencionManager cxpRetencionManager = new CxpRetencionManager();
    private CxpImpuestoManager cxpImpuestoManager = new CxpImpuestoManager();
    private CxcClienteManager cxcClienteManager=new CxcClienteManager();
    
    
    
    private Date FecInicio;
    private Date FecFin = new Date();
    boolean panelvisible;
    private int rowBanderaDetalle = -1;

    public RetencionController() {
        
        int dias = Integer.parseInt(MessagesController.obtenervariable("var_fecha_ini_default"));
        
        cabeceraRetencion =  new CxcCabeceraRetencion();
        detalleRetencion = new CxcDetalleRetencion();
        estadoRetencion = new CxpEstadoRetencion();
        tipoDocumento = new CxpTipoDocumento();
        retencion = new CxpRetencion();
        impuesto = new CxpImpuesto();
        cliente =new CxcCliente();
        
        listaCabeceraRet = cxcCabeceraRetManager.getList();
        listaEstadoRet = cxpEstadoRetManager.getList();
        listaTipoDocumento = cxpTipoDocManager.getList();
        listaRetenciones = cxpRetencionManager.getList();
        listaImpuestos = cxpImpuestoManager.getList();
        listaClientes=cxcClienteManager.getList();
        
      
        Calendar c = Calendar.getInstance();
        c.add(Calendar.DATE, -dias);
        Date date = c.getTime();
        FecInicio = date;
        
    }

    public Date getFecFin() {
        return FecFin;
    }

    public void setFecFin(Date FecFin) {
        this.FecFin = FecFin;
    }

    public Date getFecInicio() {
        return FecInicio;
    }

    public void setFecInicio(Date FecInicio) {
        this.FecInicio = FecInicio;
    }
    
    
    public boolean isPanelvisible() {
        return panelvisible;
    }

    public void setPanelvisible(boolean panelvisible) {
        this.panelvisible = panelvisible;
    }

    public void llamarPanelvisible(ActionEvent event) {
        panelvisible = !panelvisible;
    }    
    

    
    public CxpEstadoRetencionManager getCxpEstadoRetManager() {
        return cxpEstadoRetManager;
    }

    public void setCxpEstadoRetManager(CxpEstadoRetencionManager cxpEstadoRetManager) {
        this.cxpEstadoRetManager = cxpEstadoRetManager;
    }

    public CxpImpuestoManager getCxpImpuestoManager() {
        return cxpImpuestoManager;
    }

    public void setCxpImpuestoManager(CxpImpuestoManager cxpImpuestoManager) {
        this.cxpImpuestoManager = cxpImpuestoManager;
    }

    public CxpRetencionManager getCxpRetencionManager() {
        return cxpRetencionManager;
    }

    public void setCxpRetencionManager(CxpRetencionManager cxpRetencionManager) {
        this.cxpRetencionManager = cxpRetencionManager;
    }

    public CxpTipoDocumentoManager getCxpTipoDocManager() {
        return cxpTipoDocManager;
    }

    public void setCxpTipoDocManager(CxpTipoDocumentoManager cxpTipoDocManager) {
        this.cxpTipoDocManager = cxpTipoDocManager;
    }

    public CxcCabeceraRetencion getCabeceraRetencion() {
        return cabeceraRetencion;
    }

    public void setCabeceraRetencion(CxcCabeceraRetencion cabeceraRetencion) {
        this.cabeceraRetencion = cabeceraRetencion;
    }

    

    public CxcCliente getCliente() {
        return cliente;
    }

    public void setCliente(CxcCliente cliente) {
        this.cliente = cliente;
    }

    public CxcCabeceraRetencionManager getCxcCabeceraRetManager() {
        return cxcCabeceraRetManager;
    }

    public void setCxcCabeceraRetManager(CxcCabeceraRetencionManager cxcCabeceraRetManager) {
        this.cxcCabeceraRetManager = cxcCabeceraRetManager;
    }

    public CxcClienteManager getCxcClienteManager() {
        return cxcClienteManager;
    }

    public void setCxcClienteManager(CxcClienteManager cxcClienteManager) {
        this.cxcClienteManager = cxcClienteManager;
    }

    public CxcDetalleRetencionManager getCxcDetalleRetManager() {
        return cxcDetalleRetManager;
    }

    public void setCxcDetalleRetManager(CxcDetalleRetencionManager cxcDetalleRetManager) {
        this.cxcDetalleRetManager = cxcDetalleRetManager;
    }

    public CxcDetalleRetencion getDetalleRetencion() {
        return detalleRetencion;
    }

    public void setDetalleRetencion(CxcDetalleRetencion detalleRetencion) {
        this.detalleRetencion = detalleRetencion;
    }

    public List<CxcCabeceraRetencion> getListaCabeceraRet() {
        listaCabeceraRet = cxcCabeceraRetManager.buscarporFecha(FecInicio, FecFin);
        return listaCabeceraRet;
    }

    public void setListaCabeceraRet(List<CxcCabeceraRetencion> listaCabeceraRet) {
        this.listaCabeceraRet = listaCabeceraRet;
    }

    public List<CxcCliente> getListaClientes() {
        return listaClientes;
    }

    public void setListaClientes(List<CxcCliente> listaClientes) {
        this.listaClientes = listaClientes;
    }

    public List<CxcDetalleRetencion> getListaDetalleRet() {
        return listaDetalleRet;
    }

    public void setListaDetalleRet(List<CxcDetalleRetencion> listaDetalleRet) {
        this.listaDetalleRet = listaDetalleRet;
    }

     
    public List<CxpEstadoRetencion> getListaEstadoRet() {
        return listaEstadoRet;
    }

    public void setListaEstadoRet(List<CxpEstadoRetencion> listaEstadoRet) {
        this.listaEstadoRet = listaEstadoRet;
    }

    public List<CxpImpuesto> getListaImpuestos() {
        return listaImpuestos;
    }

    public void setListaImpuestos(List<CxpImpuesto> listaImpuestos) {
        this.listaImpuestos = listaImpuestos;
    }

    public List<CxpRetencion> getListaRetenciones() {
        return listaRetenciones;
    }

    public void setListaRetenciones(List<CxpRetencion> listaRetenciones) {
        this.listaRetenciones = listaRetenciones;
    }

    public List<CxpTipoDocumento> getListaTipoDocumento() {
        return listaTipoDocumento;
    }

    public void setListaTipoDocumento(List<CxpTipoDocumento> listaTipoDocumento) {
        this.listaTipoDocumento = listaTipoDocumento;
    }

    public CxpEstadoRetencion getEstadoRetencion() {
        return estadoRetencion;
    }

    public void setEstadoRetencion(CxpEstadoRetencion estadoRetencion) {
        this.estadoRetencion = estadoRetencion;
    }

    public CxpImpuesto getImpuesto() {
        return impuesto;
    }

    public void setImpuesto(CxpImpuesto impuesto) {
        this.impuesto = impuesto;
    }

    public CxpRetencion getRetencion() {
        return retencion;
    }

    public void setRetencion(CxpRetencion retencion) {
        this.retencion = retencion;
    }

    public CxpTipoDocumento getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(CxpTipoDocumento tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }
    
    

    public void nuevaCabeceraRet(ActionEvent actionEvent) {
        cabeceraRetencion.setCxcFechaEmisionCabret(FecFin);        
        detalleRetencion = new CxcDetalleRetencion();
    }

    public String eliminarCabeceraRet() {
        try {
            cabeceraRetencion.setCxpCodigoEstRet(estadoRetencion);
            cabeceraRetencion.setCxpCodigoTipDoc(tipoDocumento);
            cabeceraRetencion.setCxcCodigoCli(cliente);
            CxcCabeceraRetencion cabeceraRetencionTemp = (CxcCabeceraRetencion) (cabeceraRetencion);
            if (cxcCabeceraRetManager.delete(cabeceraRetencionTemp) == false) {
                llamarPanelvisible(null);

            }
            cabeceraRetencion= new CxcCabeceraRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
        return "index";
    }          
    
    public void insertarCabeceraRet(ActionEvent actionEvent) {
        try {
            
            cabeceraRetencion.setCxcCodigoCabret(MessagesController.obtenerkeyautomatico("cxc_cabeceraretencion", "CXC_CODIGO_CABRET"));
            cabeceraRetencion.setCxpCodigoEstRet(estadoRetencion);
            cabeceraRetencion.setCxpCodigoTipDoc(tipoDocumento);    
            cabeceraRetencion.setCxcCodigoCli(cliente);
            if (cxcCabeceraRetManager.create(cabeceraRetencion) == false) {
                llamarPanelvisible(null);                
            }
            cabeceraRetencion = new CxcCabeceraRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
    }

    public void modificarCabeceraRet(ActionEvent actionEvent) {
        try {
            cabeceraRetencion.setCxpCodigoEstRet(estadoRetencion);
            cabeceraRetencion.setCxpCodigoTipDoc(tipoDocumento);
            cabeceraRetencion.setCxcCodigoCli(cliente);
            if (cxcCabeceraRetManager.update(cabeceraRetencion) == false) {
                llamarPanelvisible(null);
            }
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
    }
    
     public void nuevoDetalleRet(ActionEvent actionEvent) {
        detalleRetencion= new CxcDetalleRetencion();
    }

    public String eliminarDetalleRet() {
        try {
          
            CxcDetalleRetencion retencionTemp = (CxcDetalleRetencion) (detalleRetencion);

            if (cxcDetalleRetManager.delete(retencionTemp) == false) {
                llamarPanelvisible(null);
            }
            listaDetalleRet=cxcDetalleRetManager.buscarporcabecera(cabeceraRetencion);
            detalleRetencion = new CxcDetalleRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }

        return "index";

    }

    public void insertarDetalleRet(ActionEvent actionEvent) {
        try {
            detalleRetencion.setCxcCodigoDetRet(MessagesController.obtenerkeyautomatico("cxc_detalleretencion","CXC_CODIGO_DETRET"));
            detalleRetencion.setCxcCodigoCabRet(cabeceraRetencion);
            detalleRetencion.setCxpCodigoRet(retencion);
            detalleRetencion.setCxpCodigoImp(impuesto);
            
            if (cxcDetalleRetManager.create(detalleRetencion) == false) {
                llamarPanelvisible(null);
            }
            listaDetalleRet=cxcDetalleRetManager.buscarporcabecera(cabeceraRetencion);
            detalleRetencion = new CxcDetalleRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }

    }

    public void modificarDetalleRet(ActionEvent actionEvent) {
        try {
           detalleRetencion.setCxpCodigoCabRet(cabeceraRetencion);
           detalleRetencion.setCxpCodigoRet(retencion);
           detalleRetencion.setCxpCodigoImp(impuesto);
           
           if (cxcDetalleRetManager.update(detalleRetencion) == false) {
                llamarPanelvisible(null);
            }
           
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }


    }

    
    public void switchEstadoCabRet(CxcCabeceraRetencion cabeceraRet){
        estadoRetencion = cabeceraRet.getCxpCodigoEstRet();
    }
    
    public void switchTipoDocumento(CxcCabeceraRetencion cabeceraRet){
        tipoDocumento = cabeceraRet.getCxpCodigoTipDoc();
    }
    
    public void switchCliente(CxcCabeceraRetencion cabeceraRet){
        cliente = cabeceraRet.getCxcCodigoCli();
    }
    
    public void switchRetencion(CxcDetalleRetencion detalleRet){
        retencion = detalleRet.getCxpCodigoRet();        
    }
    
    public void switchImpuesto(CxcDetalleRetencion detalleRet){
        impuesto = detalleRet.getCxpCodigoImp();
    }
    
    
    
    public void rowSelectionListenerCabRet(RowSelectorEvent event) {
                
        cabeceraRetencion = listaCabeceraRet.get(event.getRow());
        listaDetalleRet=cxcDetalleRetManager.buscarporcabecera(cabeceraRetencion);
        switchEstadoCabRet(cabeceraRetencion);
        switchTipoDocumento(cabeceraRetencion);   
        switchCliente(cabeceraRetencion);
    }
    
    public void rowSelectionListenerDetalle(RowSelectorEvent event){
        rowBanderaDetalle = event.getRow();
        detalleRetencion = listaDetalleRet.get(event.getRow());
        switchImpuesto(detalleRetencion);
        switchRetencion(detalleRetencion);        
    }
}
